/** AUTOCOMPLETE  FORM V1.3
 *  1.3
 *  adaugat reload trigger
 * 1.2
 * sters verificare null
 * 1.1
 * added mode autocomplete for uxFCombo
 *
 *  **/

/*global Ext*/
function fnCompleteForm(form, oData) {
    if ((typeof form != "object") || (typeof oData != "object")) {
        return;
    }

    for (datacol in oData) {

        if (form.getForm().findField(datacol)) {

            var oFormComponent = form.getForm().findField(datacol);

            if (oFormComponent.xtype) {
                switch (oFormComponent.xtype) {
                    case 'combo' :
                    {
                        // force the reload on trigger
                        oFormComponent.store.removeAll();
                        oFormComponent.lastQuery = null;
                        var myArray = [];
                        myArray.id = oData[datacol];
                        myArray.name = oData[datacol + "_val"];   ////!!!!!!!!!!!!!
                        var rec = new Ext.data.Record(myArray);
                        oFormComponent.store.add(rec);
                        oFormComponent.setValue(oData[datacol]);
                        break;
                    }
                    case 'uxFCombo' :
                    {

						//glob = oFormComponent;
                        /*myArray.id = oData[datacol];
                        myArray.name = oData[datacol + "_val"];*/

                        var rec = new Ext.data.Record(myArray);
                        if (oFormComponent.mode == "remote") {

	                        var oMapping = oFormComponent.store.reader.meta.fields;
	                        var myArray = [];

	                        for (obj in oMapping) {
		                        var  temp = oMapping[obj];
		                        myArray[temp.name] =  oData[temp.mapping];
		                        //console.log(temp.mapping);
		                        //console.log(oData[temp.mapping])
	                        }

                            // force the reload on trigger
                            oFormComponent.store.removeAll();
                            oFormComponent.lastQuery = null;
                            oFormComponent.store.add(rec);
                        }
                        oFormComponent.setValue(oData[datacol]);
                        break;
                    }

                    default :
                        oFormComponent.setValue(oData[datacol]);
                        break;
                }
            }
        }
    }
    return;
}

//un buffer view general
//acest buffer view este folosit in parametrul "view" al unui grid
//acest buffer are rolul de a mentine pozitia scroll-ului in cazul paginarii
Ext.namespace("Ext.ux");
Ext.ux.Buffer = function() {

    var gvPrime = new Ext.ux.grid.BufferView({
                scrollDelay: false
            });
    gvPrime = Ext.apply(gvPrime, {
                //keeps scroll position on store reload
                forceFit: true,
                onLoad: Ext.emptyFn,
                listeners: {
                    beforerefresh: function(v) {
                        v.scrollTop = v.scroller.dom.scrollTop;
                        v.scrollHeight = v.scroller.dom.scrollHeight;
                    },
                    refresh: function(v) {
                        //v.scroller.dom.scrollTop = v.scrollTop;
                        v.scroller.dom.scrollTop = v.scrollTop + (v.scrollTop == 0 ? 0 : v.scroller.dom.scrollHeight - v.scrollHeight);
                    }
                }
            }); //end gridView
    return gvPrime;
}

//functie folosita pentru afisarea unei valori in cadrul unui grid sau mai bine zis in cadrul coloanei unui grid;
//pentru fiecare id din coloana gridului unde este folosita functia se va afisa valoarea asociata fiecarui id
//functia primeste un obiect combo

Ext.ux.comboBoxRenderer = function(combo) {
    return function(value) {
        var store = combo.getStore();
        var finalValue = null;
        Ext.each(store.data.items, function(item) {
            if (item.data.optionValue === value) {
                finalValue = item.data.optionDisplay;
            }
        });
        return finalValue;
    };
}

//cod care are ca rol salvarea intr-un cookie state-ul unor obiecte cum ar fi gridul
//un utilizator poate ascunde o coloana sau o poate redimensiona. In acest caz rezultatul (coloana)va fi salvata si la fiecare refresh al aplicatiei starea coloanei va ramane asa cum a fost setata de user
//codul este luat de pe forum

var cp = new Ext.state.CookieProvider({
            expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 365))  //30 days
        });
Ext.state.Manager.setProvider(cp);

/**
 * functie care cauta o vaoare intr-un array
 */

function inArray(needle, haystack) {
    var length = haystack.length;
    for (var i = 0; i < length; i++) {
        if (haystack[i] == needle) {
            return true;
        }
    }
    return false;
}


